/**
 * 
 */
package clientejava.inteligencia.otello;

import java.util.ArrayList;

import clientejava.inteligencia.Estado;
import clientejava.inteligencia.Movimiento;
import clientejava.inteligencia.algoritmos.MiniMax;
import clientejava.inteligencia.otello.TableroEstado;

/**
 * @author Adm
 * 
 */
public class MiniMaxOtello extends MiniMax {

	public MiniMaxOtello(int maximaProfundidad) {
		super(maximaProfundidad);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see clientejava.inteligencia.algoritmos.MiniMax#generaMovimientosSucesores(clientejava.inteligencia.Estado,
	 *      int)
	 */
	@Override
	protected ArrayList<Movimiento> generaMovimientosSucesores(Estado estado,
			int turno) {
		// TODO Auto-generated method stub
		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see clientejava.inteligencia.algoritmos.MiniMax#heuristica(clientejava.inteligencia.Estado,
	 *      int)
	 */
	@Override
	protected int heuristica(Estado estado, int turno) {

		TableroEstado tablero = (TableroEstado) estado;

		int valor = 0;

		int fichasBlancas = 0;
		int fichasNegras = 0;
		boolean hayCasillasVacias = false;

		for (int i = 0; i < tablero.getNumFilas() && !hayCasillasVacias; i++)
			for (int j = 0; j < tablero.getNumColumnas() && !hayCasillasVacias; j++) {
				switch (tablero.getValorPosicion(i, j)) {
				case TableroEstado.BLANCA:
					fichasBlancas++;
					break;
				case TableroEstado.NEGRA:
					fichasNegras++;
					break;
				default:
					hayCasillasVacias = true;
				}
			}

		if (hayCasillasVacias) {
			if (turno == TableroEstado.BLANCA)
				valor = fichasBlancas - fichasNegras;
			else
				valor = fichasNegras - fichasBlancas;
		} else {
			if (turno == TableroEstado.BLANCA)
				valor = fichasBlancas > fichasNegras ? Integer.MAX_VALUE
						: Integer.MIN_VALUE;
			else
				valor = fichasNegras > fichasBlancas ? Integer.MAX_VALUE
						: Integer.MIN_VALUE;
		}
		
		return valor;
	}

}
